package vmr

import (
	"time"
)

type PlatformInfo struct {
	Code int      `json:"code"`
	Data Platform `json:"data"`
}

type BoxInfo struct {
	Code int `json:"code"`
	Data Box `json:"data,omitempty"`
}

type Platform struct {
	BoxId        string   `json:"box_id"`
	KafkaBrokers []string `json:"kafka_brokers"`
	S3           S3       `json:"s3"`
}

type S3 struct {
	Endpoint string `json:"endpoint"`
	Bucket   string `json:"bucket"`
	Ak       string `json:"ak"`
	Sk       string `json:"sk"`
}

type Box struct {
	BoxId      string     `json:"box_id,omitempty"`
	BoxName    string     `json:"box_name,omitempty"`
	Software   Software   `json:"software,omitempty"`
	Hardware   Hardware   `json:"hardware,omitempty"`
	IsDisabled bool       `json:"is_disabled" bson:"is_disabled"` //是否禁用
	Services   []Services `json:"services" bson:"services"`
	ReportedAt time.Time  `json:"reported_at" bson:"reported_at" validate:"required"`

	Extra   interface{} `json:"extra,omitempty" bson:"extra,omitempty"`     // 额外信息
	Cameras interface{} `json:"cameras,omitempty" bson:"cameras,omitempty"` // 车型识别里的摄像头
	Task    interface{} `json:"task,omitempty" bson:"task,omitempty"`       // 车型识别里的任务
}

type Services struct {
	ServiceId  string    `json:"service_id"`
	Version    string    `json:"version"`
	Status     int       `json:"status"`
	UpdateTime time.Time `json:"update_time" bson:"update_time"`
	SwitchedAt time.Time `json:"switched_at" bson:"switched_at"`
}

type Software struct {
	Version string `json:"version"`
}

type Hardware struct {
	Version      string `json:"version"`       // 硬件版本
	Model        string `json:"model"`         // 设备型号
	SerialNumber string `json:"serial_number"` // 设备序列号
	DiskInfo     string `json:"disk_info" `    // 硬盘信息
	ChannelNum   int    `json:"channel_num"`   // 通道个数

	Temperature float64 `json:"temperature"` // 系统温度
	CpuRate     float64 `json:"cpu_rate"`    // CPU 使用率
	MemRate     float64 `json:"mem_rate"`    // 内存使用率
	DiskUsed    float64 `json:"disk_used"`   // 存储已使用
	DiskAvail   float64 `json:"disk_avail"`  // 存储未使用
}

type MetaData struct {
	BoxId     string    `json:"box_id" bson:"box_id"` //中心侧盒子id, 新增时不填，更新时必填
	BoxName   string    `json:"box_name" bson:"box_name" validate:"required"`
	BoxType   string    `json:"box_type" bson:"box_type"` // 盒子类型，edge/交通，model/车型
	IP        string    `json:"ip" bson:"ip" validate:"required"`
	WebPort   int       `json:"web_port" bson:"web_port"`
	Username  string    `json:"username" bson:"username"`
	Password  string    `json:"password" bson:"password"`
	UpdatedAt time.Time `json:"updated_at" bson:"updated_at"`
	Longitude string    `json:"longitude" bson:"longitude"` // 经度
	Latitude  string    `json:"latitude" bson:"latitude"`   // 纬度
	Desc      string    `json:"desc" bson:"desc"`
}

type VmrTopicVO struct {
	Code int          `json:"code"`
	Data VmrTopicBody `json:"data"`
}

type VmrTopicBody struct {
	ID   int   `json:"id"`
	Body BoxVO `json:"body"`
}

type BoxVO struct {
	Command string       `json:"command"`
	Box     VmrTopicData `json:"box"`
}

type VmrTopicData struct {
	BoxId   string `json:"box_id" bson:"box_id"` //中心侧盒子id, 新增时不填，更新时必填
	BoxName string `json:"box_name" bson:"box_name" validate:"required"`
	BoxType string `json:"box_type" bson:"box_type"` // 盒子类型，edge/交通，model/车型
	ID      string `json:"id"`
	IP      string `json:"ip" bson:"ip" validate:"required"`

	KafkaBrokers []string `json:"kafka_brokers"`
	S3           S3       `json:"s3"`
}
